const Joi = require('joi');

// 发布公告数据验证规则
const createNoticeSchema = Joi.object({
  title: Joi.string().max(200).required().messages({
    'string.empty': '公告标题不能为空',
    'string.max': '公告标题不能超过200个字符',
    'any.required': '公告标题是必填项'
  }),
  content: Joi.string().required().messages({
    'string.empty': '公告内容不能为空',
    'any.required': '公告内容是必填项'
  }),
  type: Joi.string().valid('notice', 'finance', 'project', 'policy', 'activity', 'urgent').required().messages({
    'any.only': '公告类型必须是: notice, finance, project, policy, activity, urgent 中的一个',
    'any.required': '公告类型是必填项'
  }),
  is_urgent: Joi.boolean().default(false),
  publisher_id: Joi.number().integer().positive().required().messages({
    'number.base': '发布人ID必须是数字',
    'number.integer': '发布人ID必须是整数',
    'number.positive': '发布人ID必须是正数',
    'any.required': '发布人ID是必填项'
  }),
  publisher_name: Joi.string().max(100).required().messages({
    'string.empty': '发布人姓名不能为空',
    'string.max': '发布人姓名不能超过100个字符',
    'any.required': '发布人姓名是必填项'
  }),
  publish_dept: Joi.string().max(100).required().messages({
    'string.empty': '发布部门不能为空',
    'string.max': '发布部门不能超过100个字符',
    'any.required': '发布部门是必填项'
  })
});

// 更新公告数据验证规则
const updateNoticeSchema = Joi.object({
  title: Joi.string().max(200).optional().messages({
    'string.max': '公告标题不能超过200个字符'
  }),
  content: Joi.string().optional().messages({
    'string.base': '公告内容格式不正确'
  }),
  type: Joi.string().valid('notice', 'finance', 'project', 'policy', 'activity', 'urgent').optional().messages({
    'any.only': '公告类型必须是: notice, finance, project, policy, activity, urgent 中的一个'
  }),
  is_urgent: Joi.boolean().optional(),
  publisher_name: Joi.string().max(100).optional().messages({
    'string.max': '发布人姓名不能超过100个字符'
  }),
  publish_dept: Joi.string().max(100).optional().messages({
    'string.max': '发布部门不能超过100个字符'
  })
});

// 公告ID验证规则
const noticeIdSchema = Joi.object({
  id: Joi.number().integer().positive().required().messages({
    'number.base': '公告ID必须是数字',
    'number.integer': '公告ID必须是整数',
    'number.positive': '公告ID必须是正数',
    'any.required': '公告ID是必填项'
  })
});

// 公告状态更新验证规则
const updateNoticeStatusSchema = Joi.object({
  status: Joi.string().valid('draft', 'published').required().messages({
    'any.only': '公告状态只能是draft或published',
    'any.required': '公告状态是必填项'
  })
});

// 公告查询参数验证规则
const getNoticesSchema = Joi.object({
  page: Joi.number().integer().min(1).default(1).messages({
    'number.base': '页码必须是数字',
    'number.integer': '页码必须是整数',
    'number.min': '页码必须大于0'
  }),
  limit: Joi.number().integer().min(1).max(100).default(10).messages({
    'number.base': '每页数量必须是数字',
    'number.integer': '每页数量必须是整数',
    'number.min': '每页数量必须大于0',
    'number.max': '每页数量不能超过100'
  }),
  type: Joi.string().valid('notice', 'finance', 'project', 'policy', 'activity', 'urgent').optional().messages({
    'any.only': '公告类型必须是: notice, finance, project, policy, activity, urgent 中的一个'
  }),
  status: Joi.string().valid('draft', 'published').optional().messages({
    'any.only': '公告状态只能是draft或published'
  }),
  is_urgent: Joi.boolean().optional(),
  keyword: Joi.string().max(100).optional().messages({
    'string.max': '搜索关键词不能超过100个字符'
  }),
  _t: Joi.number().integer().optional().messages({
    'number.base': '时间戳参数必须是数字',
    'number.integer': '时间戳参数必须是整数'
  })
});

module.exports = {
  createNoticeSchema,
  updateNoticeSchema,
  noticeIdSchema,
  updateNoticeStatusSchema,
  getNoticesSchema
};
